package faf.business;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;

import faf.entities.Account;
import faf.entities.Question;
import faf.entities.Sheet;
import faf.entities.Survey;

public class SurveyManager extends BaseManager {
	
	/**
	 * cr�ation d'un sondage
	 * Jamal Edin Belghiti
	 * @param survey : le sondage � cr�er
	 */
	public void createSurvey(Survey survey) {
		EntityManager em = null;
		try {
			em = jpautils.createEntityManger();
			em.getTransaction().begin();
			em.persist(survey);
			em.getTransaction().commit();

		} finally {
			if (em != null) {
				em.close();
			}
		}
	}

	/**
	 * Liste des questions d'un sondage
	 * cr�ation d'une fiche
	 * Jamal Edin Belghiti
	 * @param id : l'id du sondage
	 */
	public List<Question> findListQuestion(long id) {
		EntityManager em = null;
		try {
			em = jpautils.createEntityManger();
			em.getTransaction().begin();
			Survey s = em.find(Survey.class, id);
			List<Question> lt = s.getQuestionList();
			return lt;
		} finally {
			if (em != null) {
				em.close();
			}
		}

	}

	/**
	 * Modification d'un sondage
	 * Jamal Edin Belghiti
	 * @param survey : le sondage � modifier
	 */
	public void modifySurvey(Survey survey) {
		EntityManager em = null;
		try {
			em = jpautils.createEntityManger();
			em.getTransaction().begin();
			em.merge(survey);
			em.getTransaction().commit();
		} finally {
			if (em != null) {
				em.close();
			}
		}
	}
	
	
	/**
	 * Suppression d'un sondage
	 * Jamal Edin Belghiti
	 * @param id : l'id du sondage � asupprimer
	 */
	public void deleteSurvey(long id) {
		EntityManager em = null;
		try {
			em = jpautils.createEntityManger();
			em.getTransaction().begin();
			Survey s = em.find(Survey.class, id);
			em.remove(s);
			em.getTransaction().commit();
		} finally {
			if (em != null) {
				em.close();
			}
		}
	}

	/**
	 * retourne un sondage
	 * Jamal Edin Belghiti
	 * @param id : l'id du sondage
	 * @return retourne un sondage
	 */
	public Survey get(long id) {
		EntityManager em = null;
		try {
			em = jpautils.createEntityManger();
			Survey survey = em.find(Survey.class, id);
			return survey;
		} finally {
			if (em != null) {
				em.close();
			}
		}
	}
	
	/**
	 * Liste des sondage d'un utilisateur
	 * Jamal Edin Belghiti
	 * @param id : l'id de l'utilisateur
	 * @return Liste des sondages
	 */
	public List<Survey> findListSurvey(long id) {
		EntityManager em = jpautils.createEntityManger();
		// update
		em.getTransaction().begin();
		Account c = em.find(Account.class, id);
		List<Survey> lt = c.getSurveyList();
		em.close();
		return lt;
	}

	/**
	 * Liste de tout les sondages
	 * Jamal Edin Belghiti
	 * @return Liste des sondages
	 */
	public List<Survey> listSurveys() {
		EntityManager em = null;
		try {
			em = jpautils.createEntityManger();
			TypedQuery<Survey> query = em.createQuery("FROM Survey s" , Survey.class);
			return query.getResultList();
		} finally {
			if(em != null)
				em.close();
		}
	}

	/**
	 * Permet de savoir si l'user passé en parmettre est cilbé par le 
	 * sondage passé en parametre
	 * @param survey
	 * @param user
	 * @return
	 */
	public boolean isSurveyTarget(Survey survey, Account user) {
		EntityManager em = null;
		try {
			em = jpautils.createEntityManger();
			survey = em.find(Survey.class, survey.getId());
			
			for(Sheet sheet: survey.getSheetList()) {
				if (sheet.getAccount().getId() == user.getId())
					return true;
			}
			
			return false;
		} finally {
			if(em != null)
				em.close();
		}
	}	
}
